#ifndef SOLARRADIOMETER2FORM_H
#define SOLARRADIOMETER2FORM_H

#include <QWidget>
#include <QSerialPort>
#include <QMutex>

#include "../../protocol/solarradiometerprotocol.h"

namespace Ui {
class SolarRadiometer2Form;
}

class SolarRadiometer2Form : public QWidget
{
    Q_OBJECT

public:
    explicit SolarRadiometer2Form(QWidget *parent = nullptr);
    ~SolarRadiometer2Form();

signals:
    void Sig_DeviceSolarRadioMeterProtocolNSU(const protocol::RadioMeterNSUProtocolAll& protocol);
    void Sig_DeviceSolarRadioMeterProtocolSTA(const protocol::RadioMeterSTAProtocolAll& protocol);
    void Sig_DeviceSolarRadioMeterProtocolAOD(const protocol::RadioMeterAODProtocolAll& protocol);
    void Sig_DeviceSolarRadioMeterProtocolATR(const protocol::RadioMeterATRProtocolAll& protocol);

    void Sig_DeviceSolarRadioMeterProtocolLAT(const QString& lat);
    void Sig_DeviceSolarRadioMeterProtocolLON(const QString& lon);

    void Sig_sendsolorRadioMeterPortPoint(QSharedPointer<QSerialPort> point);

    // void protocolNSU(const QByteArray& ary);
    // void protocolSTA(const QByteArray& ary);
    // void protocolAOD(const QByteArray& ary);

public slots:
    void slot_updateDeviceState(const protocol::RadioMeterSTAProtocolAll& protocol);

private:

    QSharedPointer<QSerialPort> m_port;
    QByteArray m_readBuffer;
    QMap<QByteArray, std::function<void(const QByteArray&)>> m_parseMap;
    QMutex m_mutex;

    Ui::SolarRadiometer2Form *ui;


    bool openDevice(QString);
    void closeDevice();
    //界面edit的设置
    void formInit();
    void parseMapInit();
    void connectInit();

    //不同的数据头对应的解析函数，
    void parseNSU(const QByteArray& ary);
    void parseSTA(const QByteArray& ary);
    void parseAOD(const QByteArray &ary);
    void parseATR(const QByteArray& ary);
    void parseLAT(const QByteArray& ary);
    void parseLON(const QByteArray& ary);
    void parseAZ(const QByteArray& ary);
    void parseEI(const QByteArray& ary);
    void parseSYSTEMRESET(const QByteArray& ary);
    void parseSETTIMESPAN(const QByteArray &);


};

#endif // SOLARRADIOMETER2FORM_H
